package com.me.myFramework.myAop.aop110.intercept.method;

import java.lang.reflect.Method;

/**
 * 自己实现 AOP-110：  <p></p>
 *
 * 执行方法执行前增强逻辑的切面执行类，相当于《模板模式》中的模板方法类
 *
 * @author ME
 */
public abstract class MethodBeforeAdviceInterceptor implements MethodInterceptor {

    @Override
    public Object invoke(Method method, Object[] args, Object target) throws Throwable {
        this.before(method, args, target);
        return method.invoke(target, args);
    }

    /**
     * 前置增强的模板方法。   <p></p>
     * TODO 后续通过组合模式，把 before() 抽取到 MethodBeforeAdvice 接口中
     *
     * @param method
     * @param args
     * @param target
     */
    protected abstract void before(Method method, Object[] args, Object target);

}
